// 订单集合结构
import { Db, ObjectId } from "mongodb";

export interface OrderDocument {
  _id: ObjectId; // MongoDB 自动生成的唯一ID
  orderNo: string; // 订单编号（业务唯一标识）
  roomNumber: string; // 房间号码（格式：xx-xx-xxxx）
  inviteCode: string; // 唯一邀请码
  parentInviteCode?: string; // 父级邀请码（可选，用于追踪邀请关系）
  status: "pending" | "completed" | "cancelled"; // 订单状态
  messages?: string; // 订单留言
  ua?: string; // 用户代理信息
  fingerprintId?: string; // 设备指纹
  createdAt: number; // 创建时间戳
  updatedAt: number; // 更新时间戳
  isDeleted?: boolean; // 是否已删除
}

// 创建订单集合索引
export async function createOrderIndexes(db: Db) {
  await db
    .collection<OrderDocument>("orders")
    .createIndex({ orderNo: 1 }, { unique: true });

  await db.collection<OrderDocument>("orders").createIndex({ roomNumber: 1 });

  await db
    .collection<OrderDocument>("orders")
    .createIndex({ parentInviteCode: 1 });
}

// 留言集合结构
export interface CommentDocument {
  _id: ObjectId; // MongoDB 自动生成的唯一ID
  orderId: ObjectId; // 关联的订单ID
  parentId?: ObjectId; // 父评论ID（用于回复功能）
  content: string; // 留言内容
  author: string; // 作者标识（可以是用户名、指纹ID等）
  isAdmin: boolean; // 是否管理员留言
  createdAt: number; // 创建时间戳
  updatedAt: number; // 更新时间戳
}

// 创建留言集合索引
export async function createCommentIndexes(db: Db) {
  await db
    .collection<CommentDocument>("comments")
    .createIndex({ orderId: 1, createdAt: -1 });

  await db.collection<CommentDocument>("comments").createIndex({ parentId: 1 });
}

// 邀请关系集合结构
export interface InvitationDocument {
  _id: ObjectId; // MongoDB 自动生成的唯一ID
  inviteCode: string; // 邀请码
  parentInviteCode?: string; // 父级邀请码
  orderId: ObjectId; // 关联的订单ID
  invitedOrders: ObjectId[]; // 通过此邀请码创建的订单ID列表
  createdAt: number; // 创建时间戳
  updatedAt: number; // 更新时间戳
}

// 创建邀请关系集合索引
export async function createInvitationIndexes(db: Db) {
  await db
    .collection<InvitationDocument>("invitations")
    .createIndex({ inviteCode: 1 }, { unique: true });

  await db
    .collection<InvitationDocument>("invitations")
    .createIndex({ parentInviteCode: 1 });

  await db
    .collection<InvitationDocument>("invitations")
    .createIndex({ orderId: 1 }, { unique: true });
}

// 添加新的集合定义
export interface InvitedRoomDocument {
  _id: ObjectId;
  invitationId: ObjectId; // 关联到invitation的ID
  roomNumber: string;
  orderId: ObjectId;
  createdAt: number;
}

// 添加索引创建函数
export async function createInvitedRoomIndexes(db: Db) {
  await db.collection("invitedRooms").createIndex({ roomNumber: 1 });
}
